package com.study.pusher;

import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSON;
import com.google.common.collect.Lists;
import com.study.get.jsl.BeileizhenDemo.TenTool;
import com.study.pusher.WxPusherUtils.DataInter.PusherApp;
import lombok.Data;
import lombok.experimental.Accessors;

import java.time.Duration;
import java.util.List;

/**
 * @author zhuzi
 * 2025/3/23 下午5:33
 */
public class WxPusherUtils {

    public interface Const {
        String appToken = "AT_NFpOcKOt8YH4PfZHyNaLI9xuV2ZBrYYG";
        String topicId = "1";
        String url = "https://wxpusher.zjiecode.com/api/send/message";
    }

    public static PusherApp zgApp = new PusherApp().setAppToken(Const.appToken).setTopicIds(Lists.newArrayList(38875));


    public static void main(String[] args) {
        push(zgApp, "测试", "🎉|可转债市值实时计");
    }

    public static void push(PusherApp app, String msg, String summarg) {
        DataInter.WxPusherMessage wxPusherMessage = new DataInter.WxPusherMessage();
        wxPusherMessage.setAppToken(app.getAppToken());
        //wxPusherMessage.setContent(StrUtil.format("<copy data-clipboard-text=\"{}\">{}</copy>", msg, msg));
        wxPusherMessage.setContent(StrUtil.format("<copy data-clipboard-text=\"{}\">{}</copy>", msg, msg));
        wxPusherMessage.setContentType(1);
        wxPusherMessage.setContent(msg);
        int[] array = app.getTopicIds().stream().mapToInt(Integer::intValue).toArray();
        wxPusherMessage.setTopicIds(array);
        wxPusherMessage.setSummary(summarg);

        String body = JSON.toJSONString(wxPusherMessage);
        System.out.println(body);
        String block = TenTool.webClient.post().uri(Const.url).bodyValue(wxPusherMessage).retrieve().bodyToMono(String.class).timeout(Duration.ofSeconds(8)).retry(3).block();
        System.out.println("发送返回");
        System.out.println(block);


    }

    public interface DataInter {
        @Data
        @Accessors(chain = true)
        class PusherApp {
            private Integer appId;
            /**
             * 推送的topicId
             */
            private List<Integer> topicIds;
            /**
             * appToken
             */
            private String appToken;
        }

        /**
         * WxPusher 消息推送请求实体类
         * {
         * "appToken":"AT_xxx",//必传
         * "content":"<h1>H1标题</h1><br/><p style=\"color:red;\">欢迎你使用WxPusher，推荐使用HTML发送</p>",//必传
         * //消息摘要，显示在微信聊天页面或者模版消息卡片上，限制长度20(微信只能显示20)，可以不传，不传默认截取content前面的内容。
         * "summary":"消息摘要",
         * //内容类型 1表示文字  2表示html(只发送body标签内部的数据即可，不包括body标签，推荐使用这种) 3表示markdown
         * "contentType":2,
         * //发送目标的topicId，是一个数组！！！，也就是群发，使用uids单发的时候， 可以不传。
         * "topicIds":[
         * 123
         * ],
         * //发送目标的UID，是一个数组。注意uids和topicIds可以同时填写，也可以只填写一个。
         * "uids":[
         * "UID_xxxx"
         * ],
         * //原文链接，可选参数
         * "url":"https://wxpusher.zjiecode.com",
         * //是否验证订阅时间，true表示只推送给付费订阅用户，false表示推送的时候，不验证付费，不验证用户订阅到期时间，用户订阅过期了，也能收到。
         * //verifyPay字段即将被废弃，请使用verifyPayType字段，传verifyPayType会忽略verifyPay
         * "verifyPay":false,
         * //是否验证订阅时间，0：不验证，1:只发送给付费的用户，2:只发送给未订阅或者订阅过期的用户
         * "verifyPayType":0
         * }
         */
        @Data
        @Accessors(chain = true)
        class WxPusherMessage {

            /**
             * 应用的 Token，必传参数
             */
            private String appToken;

            /**
             * 消息内容，必传参数
             * 如果 contentType 为 2（HTML），推荐只发送 body 标签内部的数据，不包括 body 标签
             */
            private String content;

            /**
             * 消息摘要，显示在微信聊天页面或者模版消息卡片上
             * 限制长度为 20 字符（微信只能显示 20 字符）
             * 可选参数，如果不传，默认截取 content 前面的内容
             */
            private String summary;

            /**
             * 内容类型：
             * 1 表示文字
             * 2 表示 HTML（推荐使用这种）
             * 3 表示 Markdown
             */
            private int contentType = 2;

            /**
             * 发送目标的 topicId，是一个数组
             * 用于群发消息，可选参数
             * 当使用 uids 单发时，可以不传
             */
            private int[] topicIds;

            /**
             * 发送目标的 UID，是一个数组
             * 注意：uids 和 topicIds 可以同时填写，也可以只填写一个
             */
            private String[] uids;

            /**
             * 原文链接，可选参数
             */
            private String url;

            /**
             * 验证订阅时间的类型：
             * 0：不验证
             * 1：只发送给付费用户
             * 2：只发送给未订阅或订阅过期的用户
             */
            private int verifyPayType = 0;

        }
    }


    public static String getPushUrl(String appToken, String topicId, String uid) {
        return "https://wxpusher.zjiecode.com/api/push/message/history?appToken=" + appToken + "&topicId=" + topicId + "&uid=" + uid;
    }


}
